import { ReactNode } from "react";
import { To } from "react-router-dom";

/**
 * 权限定义类型
 */
export type Permission = string | string[];

/**
 * 路由角色定义
 * - admin: 管理员
 * - user: 普通用户
 * - guest: 访客（未登录用户）
 */
export type Role = "admin" | "user" | "guest" | string;

/**
 * 路由元数据
 */
export interface RouteMeta {
  title?: string;
  icon?: ReactNode;
  // 需要的权限列表
  permissions?: Permission[];
  // 需要的角色
  roles?: Role[];
  // 是否需要认证
  requiresAuth?: boolean;
  // 是否在菜单中隐藏
  hideInMenu?: boolean;
  // 是否在面包屑中隐藏
  hideInBreadcrumb?: boolean;
  // 是否为精确匹配
  exact?: boolean;
  // 顺序，用于排序
  order?: number;
  // 父路由路径
  parent?: string;
}

/**
 * 路由项配置
 */
export interface RouteConfig {
  // 路径
  path: string;
  // 组件（可以是异步组件）
  component?: React.ComponentType<any> | (() => Promise<any>);
  // 重定向地址
  redirect?: To;
  // 是否懒加载
  lazy?: boolean;
  // 子路由
  children?: RouteConfig[];
  // 路由元数据
  meta?: RouteMeta;
  // 是否为布局路由
  isLayout?: boolean;
  // 路由加载状态组件
  fallback?: ReactNode;
  // 错误边界
  errorElement?: ReactNode;
}

/**
 * 应用配置
 */
export interface AppConfig {
  // 应用名称
  appName: string;
  // 默认路由
  defaultRoute: string;
  // 未授权路由
  unauthorizedRoute: string;
  // 登录路由
  loginRoute: string;
  // 404路由
  notFoundRoute: string;
  // 路由模式 - 默认为browser
  routeMode?: "browser" | "hash";
}
